﻿//#include <iostream>
//#include <stdlib.h>
//#include <iomanip>
//using namespace std;
//char a[27][3];
//int n;
//void xdfs(char x) {
//	if (x != '*')
//	{
//		cout << x;
//		for (int i=0; i<n; i++)
//			if (a[i][0] == x)
//			{
//				xdfs(a[i][1]);
//				xdfs(a[i][2]);
//			}
//	}
//	return;
//}
//int main(void) {
//	cin >> n;
//	for (int i = 0; i < n; i++)
//		cin >> a[i][0] >> a[i][1] >> a[i][2];
//	xdfs(a[0][0]);
//	return 0;
//}
//#include <iostream>
//#include <stdlib.h>
//#include <iomanip>
//using namespace std;
//struct node {
//	int l, r;
//};
//const int MAXSIZE = 10e6 + 1;
//node tree[MAXSIZE];
//void first(int t) {
//	if(t!=0)
//	cout << t<<" ";
//	if (tree[t].l != 0) first(tree[t].l);
//	if (tree[t].r != 0) first(tree[t].r);
//	return;
//}
//void middle(int t) {
//	if (tree[t].l != 0) middle(tree[t].l);
//	cout << t << " ";
//	if (tree[t].r != 0) middle(tree[t].r);
//	return;
//}
//void left(int t) {
//	if (tree[t].l != 0)left(tree[t].l);
//	if(tree[t].r!=0)left(tree[t].r);
//	cout << t << " ";
//	return;
//}
//int main(void) {
//	int n;
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//		cin >> tree[i].l >> tree[i].r;
//	first(1);
//	cout << endl;
//	middle(1);
//	cout << endl;
//	left(1);
//	return 0;
//}
//#include <iostream>
//#include <stdlib.h>
//#include <iomanip>
//using namespace std;
//struct bsttree {
//	int val;
//	bsttree* l, * r;
//};
//bsttree* node;
//const int Maxsize = 10e4 + 10;
//int dat[Maxsize];
//int s = 0;
//int flag = 1;
//void creattree(bsttree*& p, int x) {
//	if (p == NULL)
//	{
//		p = new bsttree;
//		p->val = x;
//		p->l = p->r = NULL;
//	}
//	else {
//		if (x > p->val)
//			creattree(p->r, x);
//		else if (x < p->val)
//			creattree(p->l, x);
//	}
//	return;
//}
//void dfs(bsttree*& p) {
//	if (p->l != NULL)dfs(p->l);
//	dat[s] = p->val;
//	s++;
//	if (p->r != NULL)dfs(p->r);
//	flag = 0;
//	return;
//}
//void first(bsttree*& p, int x) {
//	if(flag==1)
//	dfs(p);
//	for (int i = 0; i < s; i++) {
//		if (x == dat[i]&&i!=0)
//		{
//			cout << dat[i - 1] << endl; return;
//		}
//		else if (x == dat[i] && i == 0)
//		{
//			cout << "−2147483647" << endl; return;
//		}
//	}
//	cout << "−2147483647" << endl;
//	return;
//}
//void hind(bsttree*& p, int x) {
//	if (flag == 1)
//	dfs(p);
//	for (int i = 0; i < s; i++) {
//		if (x == dat[i] && i != s - 1)
//		{	cout << dat[i + 1] << endl; return;
//	}
//		else if (x == dat[i] && i == s - 1)
//		{
//			cout << "2147483647" << endl;
//			return;
//		}
//	}cout << "2147483647" << endl;
//	return;
//}
//void paiming(bsttree*& p, int x) {
//	if (flag == 1)
//	dfs(p);
//	for (int i = 0; i < s; i++) {
//		if (x == dat[i])
//			cout << i + 1 << endl;
//	}
//}
//void dfsplus(bsttree*& p, int x) {
//	if (flag == 1)
//	dfs(p);
//	cout << dat[x-1] << endl;
//}
//int main(void) {
//	int q,op;
//	cin >> q;
//	for (int i = 0; i < q; i++)
//	{
//		cin >> op;
//		int x;
//		cin >> x;
//		if (op == 1)paiming(node, x);
//		if (op == 2)dfsplus(node, x);
//		if (op == 3) first(node, x);
//		if (op == 4) hind(node, x);
//		if (op == 5) creattree(node, x);
//	}
//	return 0;
//}
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <math.h>
using namespace std;
int N,x;
const int maxsize = 10e5 + 10;
int tree[maxsize];
int main() {
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> tree[i];
	}
	int m = N;
	while (N) {
		N /= 2;
		x++;
	}
	int ans = 0;
	int sum = 0;
	for (int i = 0; i < x; i++)
	{
		int maxx = 0;
		for (int j = pow(2, i); j < pow(2, i+1)&&j <= m; j++)
		{
			maxx += tree[j-1];
		}
		if (ans < maxx) {
			ans = maxx; sum = i + 1;
		}
	}
	cout << sum;
	return 0;
}